perm filename PLOT3.FAI[NEW,LCS]6 blob sn#506168 filedate 1980-04-26 generic text, type T, neo UTF8
	TITLE PLOT
	INTERNAL PLOT,VARIAN
	EXTERNAL  EXTOUT,FINEXT,EXIT,PUTEXT,OUTF,TTOP,DL
;;	COMMON /DL/RSIZ,SAVER,NAME,EXT

LX:	0
N:	BLOCK =512

VARIAN:	0
	JRA 16,(16)	;DUMMY ROUTINE.  SEE PLOT4.FAI (MPV.DMP)

PLOT:	0		;SUBROUTINE PLOT(I,J,K)
     	SETO  4,		;COMMON /OUTF/JJ,KKK,KNT
	CAMN	4,OUTF		;DIMENSION N(148)
	JRST	PL4		;IF(JJ.EQ.-1)GO TO 4
	MOVNM  4,LX		;L=1
	SETZM OUTF+2	;VECTOR COUNTER (TEMPORARY, I HOPE)
	MOVEI 4,=50000
	MOVEM 4,TTOP+1		;INITIALIZE JBOT AND JTOP
	MOVNM 4,TTOP  		;JBOT=50000, JTOP=-50000
	MOVNM 4,RTMAX#		;RTMX=-50000
	MOVEM 4,X1#	;INIT OLD X AND Y
	MOVEM 5,Y1#
	MOVE 4,DL	;MOVEI	4,=127		;N(1)=127
	FMPR 4,[1000.0]		;SAVE SIZE FACTOR*1000 IN FIRST WORD.
	KIFIX 4,4		;WILL BE USED BY SEGMENT SYSTEM.
	MOVEM	4,N
	MOVE	4,[ASCIZ/" "/]		;IF(JJ.EQ.' ')JJ='PLT'
	CAME	4,OUTF
	JRST	PLB			;WRITES FILE WITH .PLT EXTENSION.
	MOVE	4,[ASCIZ/"PLT"/]
	MOVEM	4,OUTF
PLB:	JSA	16,PUTEXT	;CALL PUTEXT(JJ,'PLT')
	JUMP	OUTF
	JUMP 	[ASCIZ/PLT/]
	SETOM	OUTF		;JJ=-1
PL4:	MOVE	5,@2(16)	;4	IF(K.EQ.99)GO TO 1
	CAIN	5,=99
	JRST	PL1
	MOVE 4,@(16)	;IF(X2.EQ.X1.AND.Y2.EQ.Y1)RETURN
	MOVE 5,@1(16)	;AVOID DUPLICATE COORDS.
	CAMN 4,X1
	CAME 5,Y1
	JRST DIFRNT
	SKIPL @2(16)	;SKIP IF -3 IN PEN CODE
	JRA	16,3(16)	;RETURN
DIFRNT:	MOVEM 4,X1
	MOVEM 5,Y1		;SAVE X AND Y FOR NEXT TIME
	AOS	7,LX		;L=L+1
	CAIL	7,=129			;WILL PUT OUT WDCNT EVERY 128 WDS.
	JRST	[	CAIL 7,=257
			JRST TOP
			CAIE 7,=129
			JRST NOWD
		  WWD:	MOVEI 4,=127
			MOVEM 4,N-1(7)		;N(L)=127
			AOS LX
			JRST NOWD
		  TOP:	CAIL 7,=385
			JRST TOP2
		  	CAIE 7,=257
			JRST NOWD
			JRST WWD
		  TOP2:	CAIN 7,=385
			JRST WWD
			JRST NOWD]
			
;;NOWD:	MOVN 5,@1(16)	;ROTATE (FOR IRCAM)
;;	MOVEM 5,XTOP#
;;	MOVEM 5,@1(16)
NOWD:	MOVEI	7,N
	ADD	7,LX		;CALL PAC(N(L),I)[SEE MSFAI.FAI]
	HRRZ	4,2(16)
	HRR	5,@4
	LSHC	5,-10
	HRRZ	4,1(16)
	HRR	5,@4
	LSHC	5,-16
	HRRZ	4,(16)
	HRR	5,@4
	LSHC	5,-16
	MOVEM	6,-1(7)
	MOVEM	6,LASTPK#	;SAVE LAST PACKED FOR END OF DATA
	AOS OUTF+2	;UPDATE VECT. COUNTER
NZZ:	MOVE 1,@1(16);****ALL THIS TO FIND TRUE VERTICAL SIZE OF IMAGE.
;;NZZ:	MOVE 1,XTOP ;@1(16);****ALL THIS TO FIND TRUE VERTICAL SIZE OF IMAGE.
	MOVEI 0,2	;****
	CAME 0,@2(16)	;**** IS PEN DOWN (=2)?
	JRST NXX	;**** NO
	CAMLE 1,TTOP	;**** GETS Y COORD.
	MOVEM 1,TTOP	;****
	CAMGE 1,TTOP+1	;****	THIS AREA SAVES TOP AND BOT LIMITS
	MOVEM 1,TTOP+1	;****
  	MOVE 1,INVIS	;****
	CAMLE 1,TTOP	;****
	MOVEM 1,TTOP	;****	  THIS TO AVOID INCLUDING 1ST AND LAST
	CAMGE 1,TTOP+1	;****	  INVISIBILE POSITIONS.
	MOVEM 1,TTOP+1	;****
	MOVE 1,@(16)	; GET X COORD.
	CAMLE 1,RTMAX	; IS THIS FURTHER TO RIGHT?
	MOVEM 1,RTMAX	;YES	WRITE THIS AS LAST WD. OF FILE
	JRST NWW	;****
;;NXX:	MOVE 1,@1(16)	;**** SAVE THE Y COORD. WHEN INVIS.
NXX:	MOVEM 1,INVIS#	;****
	SKIPL @2(16)	;****	SKIP IF PEN=-3 (RESETS TO 0,0)
	JRST NWW	;****
	MOVN 1,@1(16)	;****  GET Y FOR PEN RESET
	ADDM 1,TTOP	;**** SUBTRACT NEW POS. FROM BOTH TOP AND BOT
	ADDM 1,TTOP+1	;****
NWW:	MOVE	7,LX
	CAIGE	7,=512	;3	IF(L.LT.512)RETURN
	JRA	16,3(16)
	JSA	16,EXTOUT	;2	CALL EXTOUT(N,512)
	JUMP	N
	JUMP	[=512]
	MOVEI 177		;N(1)=127  RESET BASIC WDCNT, WIPE OUT SIZE*1000
	MOVEM N
	MOVEI	7,1		;L=1
	MOVEM	7,LX
	JRA	16,3(16)	;RETURN
PL1:	MOVE 4,LX
	CAIN 4,[=512]		;IF EXACTLY 512, JUMP TO FASTOUT
	JRST PLEND
	IDIVI 4,=128		;JJJ=L/128
	IMULI 4,=128		;JJJJ=JJJ*128
	MOVE 7,4		;AC5 HAS REMAINDER
	SOJ 5,			;LESS 1, BECAUSE 128 UNIT IS WDCNT+127
	MOVEM 5,N(7)		;FOUND LAST WDCNT.
	ADDI 4,=128		; END OF NEXT LOOP
	MOVE 6,LX
	SKIPN 5
	AOJ 6,		  ;IF ON WDCNT NUM.(AC5=0), ADD 1
	MOVE 7,LASTPK
;;COULD GET BAD DATA IF EXACT 128 WDS.	MOVE	7,N-1(5)	;J=N(L)
	AOJ 6,			; (L=L+1)
PL100:	MOVEM	7,N-1(6)	;DO 100 JJ=L,JXXX  (AC4)
				;100	N(JJ)=J
	CAMGE	6,4
	AOJA	6,PL100
PLEND:	MOVE 1,RTMAX	; FARTHEST RIGHT POINT.
	MOVEM 1,N+=511	; PUT IN LAST WD OF FILE.
	JSA	16,EXTOUT	;CALL EXTOUT(N,512)
	JUMP	N
	JUMP	4
	JSA	16,FINEXT	;CALL FINEXT
	SETZM	OUTF		;JJ=0
	JSA	16,EXIT		;CALL EXIT

	END